package pers.zc.activiti.thread.demo2;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * @description 作业demo
 * @Author Lin FuYuan
 * @date 2020/5/28
 */
@Component
public class TaskDemo2 extends ParentStatus {
    //指定异步执行所用线程池
    @Async("testDemoThreadPool")
    public Boolean test(String str) throws Exception {

        System.out.println("线程开始运行");
        //判断状态是否可以运行
        Entity entity = statusMap.get(str);
        //如果不是等待状态, 不能运行,跳出方法 返回false
        if(!WAIT.equals(entity.getStatus())){
            return null;
        }
        //可以运行  修改状态为运行中
        entity.setStatus(RUNNING);
        //写入运行的线程
        entity.setThread(Thread.currentThread());
        try {
            //执行业务
            for (int i = 0; i <10 ; i++) {
                if(Thread.interrupted()){
                    //检测到线程停止  中断循环 返回false
                    throw new RuntimeException("停止线程");
                }
                Thread.sleep(1000);
            }
            //完成任务 修改状态
            entity.setStatus(DONE);
        } catch (Exception e) {
            //出现异常 修改状态为 failed
            entity.setStatus(FAILED);
        }
        return null;
    }
}
